b6b4687974cae60d02fdbaf63f3a2ac72f9dd5b9,imhotep-server/src/main/java/com/indeed/imhotep/local/ImhotepLocalSession.java,ImhotepLocalSession,regexRegroup,#String#String#number#number#number#,1149

Before Change


        docIdStream.close();
        iter.close();

        remapNegativeDocs(docRemapped, targetGroup, negativeGroup);

        finalizeRegroup();
    }

After Change


        final FastBitSetPooler bitSetPooler = new ImhotepBitSetPooler(memory);
        final FastBitSet bitSet;
        try {
            bitSet = bitSetPooler.create(numDocs);
        } catch (FlamdexOutOfMemoryException e) {
            throw new ImhotepOutOfMemoryException(e);
        }
        try {
            try (
                final StringTermIterator iter = flamdexReader.getStringTermIterator(field);
                final DocIdStream docIdStream = flamdexReader.getDocIdStream()
            ) {
                final Automaton automaton = new RegExp(regex).toAutomaton();

                while (iter.next()) {
                    final String term = iter.term();

                    if (automaton.run(term)) {
                        docIdStream.reset(iter);
                        remapPositiveDocs(docIdStream, bitSet, targetGroup, positiveGroup);
                    }
                }
            }
            remapNegativeDocs(bitSet, targetGroup, negativeGroup);
        } finally {
            bitSetPooler.release(bitSet.memoryUsage());
        }